package model.comunication;

import java.util.Calendar;
import java.util.List;

import model.Curso;
import model.Horario;
import model.Instructor;
import model.Tipo_Empleado;
import model.dba.InstructorDAO;

public class IInstructor {
	private InstructorDAO instructorDAO;
	private static IInstructor instructorInterface;

	private IInstructor() {
		this.instructorDAO = InstructorDAO.getInstance();
	}

	public static IInstructor getInstance() {
		if (instructorInterface == null) {
			instructorInterface = new IInstructor();
		}
		return instructorInterface;
	}

	/**
	 * Crea el objeto
	 * 
	 * @param nombre
	 * @param apellido
	 * @param direccion
	 * @param telefono
	 * @param celular
	 * @param nacimiento
	 * @param DNI
	 * @return
	 */
	public Instructor getInstructor(String nombre, String apellido, String email, String telefono, String celular, Calendar nacimiento, String DNI, String eliminado, int idUsuario) {
		return new Instructor(nombre, apellido, email, telefono, celular, nacimiento, DNI, eliminado, idUsuario);
	}

	/**
	 * Crea el objeto
	 * 
	 * @param nombre
	 * @param apellido
	 * @param direccion
	 * @param telefono
	 * @param celular
	 * @param nacimiento
	 * @param DNI
	 * @return
	 */
	public Instructor getInstructor(String nombre, String apellido, String email, String telefono, String celular, Calendar nacimiento, String DNI) {
		return new Instructor(nombre, apellido, email, telefono, celular, nacimiento, DNI);
	}

	/**
	 * Crea el objeto
	 * 
	 * @param nombre
	 * @param apellido
	 * @param direccion
	 * @param telefono
	 * @param celular
	 * @param nacimiento
	 * @param DNI
	 * @return
	 */
	public Instructor getInstructor(String nombre, String apellido, String email, String telefono, String celular, Calendar nacimiento, String DNI, List<Horario> horario, List<Curso> cursos) {
		return new Instructor(nombre, apellido, email, telefono, celular, nacimiento, DNI, horario, cursos);
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param DNI
	 * @return
	 */
	public Instructor getInstructor(String DNI) {
		return this.instructorDAO.get(DNI);
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param DNI
	 * @return
	 */
	public Instructor findInstructor(int idUsuario) {
		return this.instructorDAO.find(idUsuario);
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param tipo
	 * @return
	 */
	public List<Instructor> getInstructor(Tipo_Empleado tipo) {
		return this.instructorDAO.get(tipo);
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param tipo
	 * @return
	 */
	public List<Instructor> findInstructor(String nombre, String apellido) {
		return this.instructorDAO.find(nombre, apellido);
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @return
	 */
	public List<Instructor> getAllInstructor() {
		return this.instructorDAO.getAll();
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param personalAdministrativo
	 * @return
	 */
	public Integer addInstructor(Instructor instructor) {
		return this.instructorDAO.add(instructor);
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param personalAdministrativo
	 * @return
	 */
	public boolean darDeBajaInstructor(Instructor instructor) {
		return this.instructorDAO.updateBaja(instructor);
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param personalAdministrativo
	 * @return
	 */
	public boolean updateInstructor(Instructor instructor) {
		return this.instructorDAO.update(instructor);
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param personalAdministrativo
	 * @return
	 */
	public boolean deleteInstructoro(Instructor instructor) {
		return this.instructorDAO.delete(instructor);
	}

}
